#ifndef GA_H
#define GA_H

#include <QObject>
#include "path.h"

class GA:public QObject
{
    Q_OBJECT
public:
    GA(QObject *parent=nullptr);

    /****  遗传算法关键参数  ****/
    int popSize;    // 种群大小
    float cProb;    // 交叉概率
    float mProb;    // 变异概率
    float rRate;    // 父代保留比例

    bool full;      // 是否迭代至饱和
    int gFull;      // 饱和连续不变代数
    int gMax;       // 最大遗传代数
    /*************************/

    void start();   // 开始遗传算法

    enum Status{    // 算法对象状态
        UNINITIALIZED,  // 参数未设定
        FREE,           // 空闲，等待开始
        PROCESSING,     // 正在执行算法三
        STOP,           // 收到中止命令
        PAUSE,          // 暂停
    } state;

    /****  算法过程信息  ****/
    Population m_pop;   // 当前种群
    int gCurrent;       // 当前代数
    float currentCost;    // 当前代价

    QList<float> history;   // 记录最小代价历史信息
    /**********************/

signals:
    void update();  // 要求主窗口更新显示信息时发出
};

#endif // GA_H
